﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

namespace pos_trab_2.Model
{
    /// <summary>
    /// Classe Conexao
    /// </summary>
    [Serializable]
    class Conexao
    {
        /// <summary>
        /// Atributo Código
        /// </summary>
        [OptionalField]
        [NonSerialized]
        private int codigo;
        
        /// <summary>
        /// Atributo Nome
        /// </summary>
        private string nome;

        /// <summary>
        /// Atributo Descricao
        /// </summary>
        private string descricao;

        /// <summary>
        /// Atributo URL: nome de conexao do acesso
        /// </summary>
        private string url;

        /// <summary>
        /// Atributo porta: porta utilizada no acesso
        /// </summary>
        private string porta;

        /// <summary>
        /// Atributo de autenticação do conexao
        /// </summary>
        private Autenticacao autenticacao;

        /// <summary>
        /// Atributo dataModificacao: guarda a data da última modificação na senha
        /// </summary>
        private DateTime dataModificacao;

        /// <summary>
        /// Atributo tipoAcesso: guarda o tipo de acesso a ser utilizado
        /// </summary>
        private int tipoAcesso;

        /// <summary>
        /// Construtor da Classe Conexao, com todos os atributos
        /// </summary>
        /// <param name="_codigo">Codigo</param>
        /// <param name="_nome">Nome</param>
        /// <param name="_descricao">Descricao</param>
        /// <param name="_url">URL</param>
        /// <param name="_porta">Porta</param>
        /// <param name="_autenticacao">Autenticacao</param>
        /// <param name="_dataModificacao">DataModificacao</param>
        /// <param name="_tipoAcesso">TipoAcesso</param>
        public Conexao(int _codigo, string _nome, string _descricao, string _url, string _porta, 
                        Autenticacao _autenticacao, DateTime _dataModificacao, int _tipoAcesso)
        {
            this.Codigo = _codigo;
            this.Nome = _nome;
            this.Descricao = _descricao;
            this.Url = _url;
            this.Porta = _porta;
            this.Autenticacao = _autenticacao;
            this.DataModificacao = _dataModificacao;
            this.TipoAcesso = _tipoAcesso;
        }

        public Conexao() 
        {
            this.Codigo = 0;
            this.Nome = string.Empty;
            this.Descricao = string.Empty;
            this.Url = string.Empty;
            this.Porta = string.Empty;
        }
       
        /// <summary>
        /// Propriedade Código
        /// </summary>
        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        /// <summary>
        /// Propriedade Nome
        /// </summary>
        public string Nome
        {
            get { return nome; }
            set { nome = value; }
        }

        /// <summary>
        /// Propriedade Descricao
        /// </summary>
        public string Descricao
        {
            get { return descricao; }
            set { descricao = value; }
        }

        /// <summary>
        /// Propriedade URL
        /// </summary>
        public string Url
        {
            get { return url; }
            set { url = value; }
        }

        /// <summary>
        /// Propriedade Porta
        /// </summary>
        public string Porta
        {
            get { return porta; }
            set { porta = value; }
        }

        /// <summary>
        /// Propriedade DataModificacao
        /// </summary>
        public DateTime DataModificacao
        {
            get { return dataModificacao; }
            set { dataModificacao = value; }
        }

        /// <summary>
        /// Propriedade Autenticacao
        /// </summary>
        public Autenticacao Autenticacao
        {
            get { return autenticacao; }
            set { autenticacao = value; }
        }

        /// <summary>
        /// Propriedade Tipo de Acesso
        /// </summary>
        public int TipoAcesso
        {
            get { return tipoAcesso; }
            set { tipoAcesso = value; }
        }

        /// <summary>
        /// Método ToString
        /// </summary>
        /// <returns></returns>
        override public string ToString() 
        { 
            return string.Format("{0};{1};{2};{3};{4};{5};{6}\n", this.Codigo, this.Nome, this.Descricao, this.Url, this.Porta, this.Autenticacao.ToString(), this.DataModificacao);
        }
    }
}
